home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / MacOS / QuickDraw™ 3D 1.0.6F4 SDK / Development / 3DMF parser / 0.9 version / MFTEXTWR.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-24  |  3.1 KB  |  127 lines  |  [TEXT/MPS ]

  1. /*==============================================================================
  2.  *
  3.  *    File:        MFTEXTWR.C
  4.  *
  5.  *    Function:    Routines for writing Text files
  6.  *
  7.  *    Author(s):    Rick Wong (RWW)
  8.  *
  9.  *    Copyright:    (c) 1995 by Apple Computer, Inc., all rights reserved.
  10.  *
  11.  *    Change History (most recent first):
  12.  *        Fabio    Changed file name to 8 characters
  13.  *        F2K_RWW    File created.
  14.  *==============================================================================
  15.  */
  16. #include "MFTEXTWR.H"
  17.  
  18. #include <stdarg.H>        /* variable argument lists */
  19. #include <stdio.H>        /* vsprintf */
  20.  
  21. #include "MFERRORS.H"
  22. #include "MFASSERT.H"
  23. #include "MFINTOBJ.H"
  24. #include "MFTEXTST.H"
  25.  
  26. /*==============================================================================
  27.  *    MF3D_WriteNewLine
  28.  *
  29.  *    Add a new line to a text file (it is supposed to be readable, after all)
  30.  *==============================================================================
  31.  */
  32. MF3DErr
  33. MF3D_WriteNewLine(
  34.     MF3D_FilePtr    inMetafile)
  35. {
  36.     char                 buffer[kMF3D_MaxIndentation + 1];
  37.     unsigned int        indentation;
  38.  
  39.     if (!MF3DIsTextFormat(inMetafile->dataFormat))
  40.         return kMF3DNoErr;
  41.  
  42.     indentation = inMetafile->indent + 1;
  43.     while (indentation-- > 0)
  44.         buffer[indentation] = kMF3D_TabChar;
  45.     buffer[0] = kMF3D_NewLineChar;
  46.  
  47.     return MF3D_WriteProc(inMetafile, inMetafile->indent + 1, buffer);
  48. }
  49.  
  50. /*==============================================================================
  51.  *    MF3D_OutputText
  52.  *
  53.  *    fprintf
  54.  *==============================================================================
  55.  */
  56. MF3DErr
  57. MF3D_OutputText(MF3D_FilePtr inMetafile, const char *inFormatStr, ...)
  58. {
  59.     va_list        paramList;
  60.     int            charsWritten;
  61.     char        buffer[kMaxOutputTextBuffer];
  62.     MF3DErr        result;
  63.  
  64.     result = kMF3DNoErr;
  65.  
  66.     va_start(paramList, inFormatStr);
  67.     
  68.     charsWritten = vsprintf(buffer, inFormatStr, paramList);
  69.  
  70.     va_end(paramList);
  71.  
  72.     MFASSERT(charsWritten < kMaxOutputTextBuffer);
  73.  
  74.     if (charsWritten < 0)
  75.         result = kMF3DErrCantWrite;
  76.  
  77.     if (result == kMF3DNoErr)
  78.         result = MF3D_WriteProc(inMetafile, charsWritten, buffer);
  79.  
  80.     return result;
  81. }
  82.  
  83. /*==============================================================================
  84.  *    MF3D_WriteTextString
  85.  *
  86.  *    Write a text string
  87.  *==============================================================================
  88.  */
  89. MF3DErr
  90. MF3D_WriteTextString(
  91.     MF3D_FilePtr        inMetafilePtr,
  92.     MF3DCStringPtr        inStringPtr)
  93. {
  94.     MF3DErr                result;
  95.     char                c, *strPtr;
  96.  
  97.     result = kMF3DNoErr;
  98.  
  99.     strPtr = inStringPtr;
  100.  
  101.     /* Output characters until we reach EOS */
  102.     while (result == kMF3DNoErr && (c = *strPtr++) != '\0')
  103.     {    switch (c)
  104.         {    /* These characters are escaped */
  105.             case '\a':    c = 'a'; goto OutputEscape;
  106.             case '\b':    c = 'b'; goto OutputEscape;
  107.             case '\f':    c = 'f'; goto OutputEscape;
  108.             case '\n':    c = 'n'; goto OutputEscape;
  109.             case '\r':    c = 'r'; goto OutputEscape;
  110.             case '\t':    c = 't'; goto OutputEscape;
  111.             case '\v':    c = 'v'; goto OutputEscape;
  112.             case '\\':
  113.             case '\'':
  114.             case '\"':
  115. OutputEscape:
  116.                 result = MF3D_OutputText(inMetafilePtr, kMF3D_StringEscapeStr);
  117.                 /* Fall through to normal output */
  118.             default:
  119.                 if (result == kMF3DNoErr)
  120.                     result = MF3D_OutputText(inMetafilePtr, "%c", c);
  121.         }
  122.     }
  123.  
  124.     return result;
  125. }
  126.  
  127.